﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace dacli.pantallas
{
    public partial class Pagos : Form
    {
        modelos.Pedidos pedido;
        double total;
        double abonado;
        modelos.dao.Conexion conexion;
        public modelos.dao.PedidosDAO pedidosDao; 
        private void mostrarPagos()
        {
            conexion = new modelos.dao.Conexion();
            pedidosDao = new modelos.dao.PedidosDAO();
            pedidosDao.pedidos = pedido; 
            BindingSource bindingSource = new BindingSource();
            abonado = pedidosDao.getTotalPagos(pedido.id);
            lblAbonado.Text =  abonado.ToString("C");
            lblRestan.Text = getRestan().ToString("C");
            lblCambio.Text = "";
            string sql = "SELECT * FROM   pagos WHERE pedidos_id =" + pedido.id;
            SqlDataAdapter MyDA = conexion.consultarAdapter(sql);
            DataTable dataTable = new DataTable();
            MyDA.Fill(dataTable);
            bindingSource.DataSource = dataTable;
            dgPagos.DataSource = bindingSource;
        }

        public Pagos(modelos.Pedidos pedido, double total)
        {
            InitializeComponent();
            this.pedido = pedido;
            this.total = total;            
            mostrarPagos();
            btPagar.Enabled = (pedido.estado.id == modelos.PedidoEstado.ABIERTO);
            txtMonto.Enabled= btPagar.Enabled;
            cmbForma.Enabled = btPagar.Enabled;
//            txtMonto.Text = getRestan().ToString();

        }
        private double getMontoPagado()
        {
            double monto = 0;
            Double.TryParse(txtMonto.Text, out monto);
            return monto;
        }

        private double getRestan()
        {
            double cambio = getCambio();
            double cancelado = (this.getMontoPagado() + abonado)- cambio;
            return total - (this.getMontoPagado() + abonado) + cambio;
        }
             
        private double getCambio()
        {
            double cambio = (getMontoPagado()+abonado) - total ;
            cambio = cambio > 0 ? cambio : 0;
            if (cambio < 0)
            {
                lblCambio.BackColor = Color.Red;
            } 
            else
            {
                if (cambio == 0)
                {
                    lblCambio.BackColor = this.BackColor;
                }
                else
                {
                    lblCambio.BackColor = Color.Green;
                }
                
            }
            return cambio;
        }

        

        private void Pagos_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet1.usuarios' Puede moverla o quitarla según sea necesario.
            this.usuariosTableAdapter.Fill(this.dacliDataSet1.usuarios);
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet1.forma_pago' Puede moverla o quitarla según sea necesario.
            this.forma_pagoTableAdapter.Fill(this.dacliDataSet1.forma_pago);
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet.pagos' Puede moverla o quitarla según sea necesario.
            this.pagosTableAdapter.Fill(this.dacliDataSet.pagos);
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet.forma_pago' Puede moverla o quitarla según sea necesario.
            this.forma_pagoTableAdapter.Fill(this.dacliDataSet.forma_pago);
            lblTotal.Text = total.ToString("C");
            lblPedido.Text = pedido.ToString();
        }

        private void txtMonto_TextChanged(object sender, EventArgs e)
        {
            lblCambio.Text = getCambio().ToString("C");
            lblRestan.Text = getRestan().ToString("C");
        }

        private void lblCambio_Click(object sender, EventArgs e)
        {

        }

        private void dgPagos_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            modelos.dao.Conexion conexion = new modelos.dao.Conexion();
            long formaPagoId = Convert.ToInt64(cmbForma.SelectedValue);
            long usuario_id = modelos.clases.Configuraciones.usuarioEntro;
            double restan = getRestan();
            double monto = Convert.ToDouble(txtMonto.Text) - getCambio();
            //TODO: Cambiar a Modelo
            conexion.ejecutar("INSERT INTO pagos(pedidos_id, forma_pago_id, usuarios_id, fecha, hora, monto, restan) VALUES "
                + "(" + pedido.id + "," + formaPagoId + "," + usuario_id +",now(),now()," + monto +"," + restan +")");
            if (restan == 0)
            {
                pedidosDao.cerrar();
            }
            this.mostrarPagos();            
            this.Close();
        }

        private void dgPagos_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtMonto_Enter(object sender, EventArgs e)
        {
            txtMonto.SelectAll();
        }
    }
}
